스코프(Scope)

✒️ 2025-05-23 13:47 내용 수정


참고 자료 : Geeksforgeeks Scope of Variables in Java

변수와 메서드의 생명주기와 접근 권한을 정의하는 개념


1. 클래스 스코프(Class Scope)

public class Test {
	// 클래스 스코프 필드
	private int number;
	String name;

	public void print() {}
}

인스턴스 변수(Instance Variable)

public class Test {  
	// 인스턴스 변수
    private int number;  
  
    public Test() {  
        number = 10;  
    }  
    
    public void print(int number) {  
        this.number = number;  
        System.out.println("number: " + number);  
    }  
}
public class Main {  
    public static void main(String[] args) {  
		Test test = new Test();  
		test.print(100);  
		  
		Test test2 = new Test();  
		test2.print(500);
    }  
}
number: 100
number: 500

정적 변수(Static Variable)

public class Test {  
    private int number;  
    static String name = "test";  
  
    public Test() {  
        number = 10;  
    }  
  
    public void print(int number) {  
        this.number = number;  
        System.out.println("number: " + number);  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public void getName() {  
        System.out.println("name: " + name);  
    }  
}
public class Main {  
    public static void main(String[] args) {  
        Test test = new Test();  
        Test test2 = new Test();  
  
		// test에서 static 변수 변경  
		test.setName("Kim");  
		test.getName();  
		test2.getName();  
		  
		// test2에서 static 변수 변경  
		test2.setName("Elsa");  
		test.getName();  
		test2.getName();  
    }  
}
name: Kim
name: Kim
--------
name: Elsa
name: Elsa

2. 메서드 스코프(Method Scope)

public class Test {
	public void print() {
		int number = 10;
		System.out.println("number: " + number);
	}
	
	// 메서드 외부에서 접근 불가
	// System.out.println("number: " + number); - 에러
}

3. 파라미터 스코프(Parameter Scope)

public class Test {
	public void print(String name) {
		System.out.println(name);
	}
}

4. 블록 스코프(Block Scope)

public class Test {  
    private int number;  
    static String name = "test";  
  
    public Test() {  
        number = 10;  
    }  
  
    public void blockTest() {  
        String name = "alpha";  
        {  
            int number = 200;  
            System.out.println("'number' in block: " + number);  
        }  
        System.out.println("'name' in blockTest(): " + name);  
        System.out.println("'number' outside block: " + number);  
    }  
}
public class Main {  
    public static void main(String[] args) {  
        Test test = new Test();  
        test.blockTest();   
    }  
}
'number' in block: 200
'name' in blockTest(): alpha
'number' outside block: 10